package com.cty.basic;

import java.lang.reflect.InvocationTargetException;

/**
 * @Auther: cty
 * @Date: 2020/1/22 11:37
 * @Description:  测试反射
 * 1 什么是反射？
 *      * 反射就是把java类中的各种结构(方法、属性、构造器、类名)映射成一个个的Java对象。
 * 2 反射的基本步骤是什么？
 * （1）获取Class对象
 *      * 方式一：Class clz = 对象.getClass()
 *      * 方式二：Class clz = 类.class()
 *      * 方式三：Class clz = Class.forName("包名.类名")  推荐，字符串可变更，比较灵活！
 * （2）动态创建对象
 *      * MyClass myclz = (MyClass)clz.getxxx.newInstance();
 * @version: 1.0
 */
public class Test01Reflect {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        //三种方式
        //1、对象.getClass()
        Iphone iphone =new Iphone();
        Class clz = iphone.getClass();
        //2、类.class()
        clz = Iphone.class;
        //3、Class.forName("包名.类名")
        clz = Class.forName("com.cty.basic.Iphone");

        //创建对象
		/*Iphone iphone2 =(Iphone)clz.newInstance();
		System.out.println(iphone2);*/
        Iphone iphone2 =(Iphone)clz.getConstructor().newInstance();
        System.out.println(iphone2);
    }
}

class Iphone{
    public Iphone() {

    }
}
